package com.guomao.demoe;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicTicketSeller implements Runnable {
    // 定义一个AtomicInteger类型的成员变量tickets，初始值为100
    private AtomicInteger tickets = new AtomicInteger(100);

    // 定义sellTicket方法，用于售票
    public void run() {
        // 使用while循环持续尝试售票，直到票售罄
        while (true) {
            // 获取当前票数
            int current = tickets.get();
            // 检查当前票数是否小于等于0，如果是则退出循环
            if (current <= 0) {
                // 打印线程名和票已售罄的信息（此处注释掉了实际打印代码）
                System.out.println(Thread.currentThread().getName() + " 发现票已售罄");
                break;
            }
            // 尝试原子地将票数从current减1，如果成功则执行以下代码块
            if (tickets.compareAndSet(current, current - 1)) {
                try {
                    // 模拟售票过程耗时50毫秒
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    // 打印中断异常信息
                    e.printStackTrace();
                }
                // 打印线程名、卖出的票号以及剩余票数
                System.out.println(Thread.currentThread().getName() +
                        " 卖出第" + current + "张票，剩余票数: " + (current - 1));
                // 成功售出一张票后，退出循环
//                break;
            }
            // 如果CAS操作失败（票数被其他线程修改），继续循环尝试
        }
    }
}